﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using AcademiaDAO;
using AcademiaEntidades;

public partial class Administracion_NivelCurso : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Para controlar el botan para atras del navegador
        if (Session["Usuario"] == null)
            Response.Redirect("~/Publico/Login.aspx");
        if (!IsPostBack)
        {
            ViewState["orden"] = "Nivel";
            panelBuscar.Visible = true;
            panelGrilla.Visible = false;
            panelDatos.Visible = false;
            txtNivelBus.Focus();
            cargarSesion();//Cargar los datos de session
        }
    }
    private void cargarSesion()
    {
        lblUsuarioLogueado.Text = ((Usuarios)Session["Usuario"]).Usuario;
        lblRolLogueado.Text = ((Usuarios)Session["Usuario"]).Rol;
    }
    protected void btnLimpiar_Click(object sender, EventArgs e)
    {
        LimpiarBusqueda();
        panelGrilla.Visible = false;
        panelDatos.Visible = false;
        txtNivelBus.Focus();
    }

    private void LimpiarBusqueda()
    {
        txtNivelBus.Text = string.Empty;
        txtModalidadBus.Text = string.Empty;
        lblMensaje.Text = string.Empty;
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        Buscar();
    }

    private void Buscar()
    {
        string nivel = txtNivelBus.Text.Trim();
        string modalidad = txtModalidadBus.Text.Trim();
        CargarGrilla(nivel, modalidad);

        panelGrilla.Visible = true;
    }

    private void CargarGrilla(string nivel, string modalidad)
    {
        List<NivelCurso> niveles = NivelCursoDAO.Consultar(nivel, modalidad);
        CargarGrilla(niveles);
    }

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        panelBuscar.Visible = false;
        panelGrilla.Visible = false;
        panelDatos.Visible = true;

        Limpiar();
        ViewState["nivel"] = null;
        txtNivel.Focus();
    }

    private void Limpiar()
    {
        txtNivel.Text = string.Empty;
        txtModalidad.Text = string.Empty;
        txtCupo.Text = string.Empty;
        txtModulos.Text = string.Empty;
        lblMensajeDatos.Text = string.Empty;
        ViewState["nivel"] = null;
    }

    protected void btnLimpiarDatos_Click(object sender, EventArgs e)
    {
        Limpiar();
        txtNivel.Focus();
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        // obtención de datos
        // con Trim() se eliminar los espacios en blanco al comienzo y al final de la cadena
        string nivel = txtNivel.Text.Trim();
        string modalidad = txtModalidad.Text.Trim();

        int cupo = int.Parse(txtCupo.Text.Trim());
        int modulos = int.Parse(txtModulos.Text.Trim());

        string mensaje = string.Empty;
        NivelCurso nc = null;
        try
        {
            if (ViewState["nivel"] != null && ((NivelCurso)ViewState["nivel"]).IdNivelCurso > 0)
            {
                // si es una modificación
                nc = (NivelCurso)ViewState["nivel"];
                mensaje = "Nivel actualizado";
            }
            else
            {
                // si es un nuevo nivel
                nc = new NivelCurso();
                nc.IdNivelCurso = 0;
                mensaje = "Nivel agregado";
            }

            nc.Cupo = cupo;
            nc.Nivel = nivel;
            nc.Modalidad = modalidad;
            nc.Modulos = modulos;

            NivelCursoDAO.Guardar(nc);

            lblMensaje.ForeColor = System.Drawing.Color.Green;
            lblMensaje.Text = mensaje;

            CargarGrilla();
            panelDatos.Visible = false;
            panelBuscar.Visible = true;
            Limpiar();
        }
        catch (Exception ex)
        {
            lblMensajeDatos.ForeColor = System.Drawing.Color.Red;
            lblMensajeDatos.Text = ex.Message;
        }
    }

    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        if (ViewState["nivel"] != null)
        {
            int id = ((NivelCurso)ViewState["nivel"]).IdNivelCurso;
            if (id > 0)
            {
                try
                {
                    NivelCursoDAO.darDeBaja(id);
                    CargarGrilla();
                    lblMensaje.Text = "Se ha eliminado el nivel";
                    lblMensaje.ForeColor = System.Drawing.Color.Green;
                    panelBuscar.Visible = true;
                    panelDatos.Visible = false;
                    Limpiar();
                }
                catch (Exception ex)
                {
                    lblMensaje.ForeColor = System.Drawing.Color.Red;
                    lblMensaje.Text = ex.Message;
                }
            }
        }
    }

    private void CargarGrilla(List<NivelCurso> listaNiveles)
    {
        // lblMensaje.Text = string.Empty;
        try
        {
            List<NivelCurso> niveles = null;
            if (listaNiveles == null)
            {
                niveles = NivelCursoDAO.ConsultarTodos();
            }
            else
            {
                niveles = listaNiveles;
            }

            gvNiveles.DataSource = niveles;
            gvNiveles.DataKeyNames = new string[] { "IdNivelCurso" };
            gvNiveles.DataBind();
        }
        catch (Exception ex)
        {
            lblMensaje.ForeColor = System.Drawing.Color.Red;
            lblMensaje.Text = ex.Message;
        }
    }

    private void CargarGrilla()
    {
        CargarGrilla(null);
    }

    protected void btnVolver_Click(object sender, EventArgs e)
    {
        panelBuscar.Visible = true;
        panelDatos.Visible = false;
        txtNivelBus.Focus();
    }

    protected void gvNiveles_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            int id = int.Parse(gvNiveles.SelectedDataKey.Value.ToString());
            NivelCurso nc = NivelCursoDAO.DevolverPorID(id);

            if (nc != null)
            {
                panelDatos.Visible = true;
                panelBuscar.Visible = false;
                CargarDatosNivel(nc);
                txtNivel.Focus();
            }
        }
        catch (Exception ex)
        {
            lblMensaje.ForeColor = System.Drawing.Color.Red;
            lblMensaje.Text = ex.Message;
        }
    }

    private void CargarDatosNivel(NivelCurso nivel)
    {
        ViewState["nivel"] = nivel;
        txtNivel.Text = nivel.Nivel;
        txtModalidad.Text = nivel.Modalidad;
        txtModulos.Text = nivel.Modulos.ToString();
        txtCupo.Text = nivel.Cupo.ToString();
    }

    protected void gvNiveles_Sorting(object sender, GridViewSortEventArgs e)
    {
        ViewState["orden"] = e.SortExpression;
        Buscar();
    }

    protected void gvNiveles_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvNiveles.PageIndex = e.NewPageIndex;
        Buscar();
    }
    protected void btnCerrarSesion_Click(object sender, EventArgs e)
    {
        ////Eliminar la cookie
        //Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now;
        ////Terminar la Sesion
        //FormsAuthentication.SignOut();
        //Response.Redirect("~/Publico/InicioWF.aspx");

        //************************************************************
        //Otra forma de eliminar la cookie del equipo del usuario
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie paraBorrar = new HttpCookie(FormsAuthentication.FormsCookieName);
            paraBorrar.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(paraBorrar);
        }
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Publico/InicioWF.aspx");
    }
}